/*
 * Copyright 2011 Carnegie Mellon University
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, 
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package edu.cmu.lti.ritesdk;

/**
 * This is the class RITE system will extend 
 * and implement. 
 * 
 * @author Hideki Shima
 */
public abstract class AbstractRiteSystem {

  public AnalyzedDataSet run( DataSet d, Task task ) {
    initialize();
    AnalyzedDataSet analyzedData = new AnalyzedDataSet();
    for ( TextPair t : d.values() ) {
      AnalyzedTextPair analysis = run( t );
      String label = analysis.getSystemLabel();
      //If system generated label is invalid,
      if ( !task.getDefinedLabels().contains(label.toUpperCase()) ) {
        System.err.println("ERROR: Invalid label \""+label+"\" " +
        		"has been returned at id="+t.getId()+". Valid labels are: "+task.getDefinedLabels());
      }
      analyzedData.put(t.getId(), analysis);
    }
    processComplete();
    return analyzedData;
  }
  
  // Users will have to implement this method.
  // See CharOverlapBasedRecognizer for the simplest implementation.
  abstract public AnalyzedTextPair run( TextPair t );
  
  public void initialize() {};
  
  public void processComplete() {};
  
}
